﻿/*! \file platform.h
  \brief 平台检测相关代码

  根据不同的平台，定义不同的macro，具体定义如下。
  1) 编译器相关
    AC_RVALUE_REF      使用右值引用
    AC_LAMBDA        使用lambda表达式
  2) 代码相关
    AC_STDMOVE        根据是否使用右值引用，AC_STDMOVE(x)被展开成std::move(x)或者x
*/

#pragma once

//整理MSVC各个版本对应的_MSC_VER值
#define MSVC10    1600
#define MSVC9    1500
#define MSVC8    1400

//根据不同的平台推演出现在可以支持的宏定义
#ifdef WIN32
//Windows 操作系统
#ifdef _MSC_VER
//MSVC 编译器
#if _MSC_VER >= MSVC10
#define AC_RVALUE_REF
#define AC_LAMBDA
#endif  // _MSC_VER >= MSVC10
#endif  // _MSC_VER
//TODO(oldman): 添加对其他编译器支持
#endif  // WIN32
//TODO(oldman): 添加对其他操作系统平台支持

#ifdef AC_RVALUE_REF
#define AC_STDMOVE(x)    std::move(x)
#else
#define AC_STDMOVE(x)    x
#endif  // AC_RVALUE_REF